import { Singleton } from './singleton';

/**
 * 日志级别枚举
 */
export enum ELogLevel {
    DEBUG = 0,
    INFO = 1,
    WARN = 2,
    ERROR = 3,
}

/**
 * 日志管理器
 */
@Singleton
export class Logger {
    /** 当前日志级别 */
    private level: ELogLevel = ELogLevel.DEBUG;

    /** 是否启用时间戳 */
    private enableTimestamp: boolean = true;

    /**
     * 设置日志级别
     * @param level 日志级别
     */
    setLevel(level: ELogLevel): void {
        this.level = level;
    }

    /**
     * 设置是否启用时间戳
     * @param enable 是否启用
     */
    setEnableTimestamp(enable: boolean): void {
        this.enableTimestamp = enable;
    }

    /**
     * 获取时间戳
     * @returns 时间戳字符串
     */
    private getTimestamp(): string {
        if (!this.enableTimestamp) return '';
        return `[${new Date().toISOString()}]`;
    }

    /**
     * 调试日志
     * @param message 日志消息
     * @param args 额外参数
     */
    debug(message: string, ...args: any[]): void {
        if (this.level <= ELogLevel.DEBUG) {
            console.debug(`${this.getTimestamp()}[DEBUG] ${message}`, ...args);
        }
    }

    /**
     * 信息日志
     * @param message 日志消息
     * @param args 额外参数
     */
    info(message: string, ...args: any[]): void {
        if (this.level <= ELogLevel.INFO) {
            console.info(`${this.getTimestamp()}[INFO] ${message}`, ...args);
        }
    }

    /**
     * 警告日志
     * @param message 日志消息
     * @param args 额外参数
     */
    warn(message: string, ...args: any[]): void {
        if (this.level <= ELogLevel.WARN) {
            console.warn(`${this.getTimestamp()}[WARN] ${message}`, ...args);
        }
    }

    /**
     * 错误日志
     * @param message 日志消息
     * @param args 额外参数
     */
    error(message: string, ...args: any[]): void {
        if (this.level <= ELogLevel.ERROR) {
            console.error(`${this.getTimestamp()}[ERROR] ${message}`, ...args);
        }
    }
} 